<?php
/**
 * This file is part of the Yacms (http://www.yacms.org)
 * Copyright (c) 2019 gylr0505 (http://www.yacms.org)
 *
 * Author: 鬼一浪人 <gylr0505@163.com>
 *
 * DateTime: 19-10-24 下午8:32
 * Description:
 */

declare(strict_types = 1);

namespace App\Template;

use Swlib\Saber\Response;

interface TemplateInterface
{
    /**
     * 通知客户端前置条件，通过后方可通知；
     * 主要用于频率相关的检测
     * @param array $params
     * @return mixed
     */
    public function accept($params = []);

    /**
     * 通知客户端
     * @param array $params 模板配置原始值
     * @return mixed
     */
    public function notifyClient($params = []);

    /**
     * 请求客户端后的回调
     * @param Response $result  子客户端返回的结果集
     * @param array $params     模板配置的原始值
     * @return mixed
     */
    public function handleNotifyClientCallback(Response $result, $params = []);

    /**
     * @param $value  即将被缓存的值
     * @return mixed
     */
    public function push($value);

    /**
     * @return mixed
     */
    public function pop();

    /**
     * 发出模板消息
     * @param array $params  模板配置原始消息
     * @return mixed
     */
    public function send($params = []);

    /**
     * 清空队列的所有数据
     * @return mixed
     */
    public function clear();

    /**
     * 发出模板消息后，回调
     * @param Response $result
     * @param array $params  模板配置原始消息
     * @return mixed
     */
    public function handleSendCallback(Response $result, $params =[]);

    /**
     * @return mixed
     */
    public function getId();

    /**
     * @return mixed
     */
    public function getType();
}